package inge_soft.gestoriusNuevo.business.service.implementation;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import inge_soft.gestoriusNuevo.business.service.abstraction.IActividadService;
import inge_soft.gestoriusNuevo.persistence.DAO.abstraction.IActividadDAO;
import inge_soft.gestoriusNuevo.persistence.DAO.abstraction.IEstadoDAO;
import inge_soft.gestoriusNuevo.persistence.DAO.abstraction.IEventoDAO;
import inge_soft.gestoriusNuevo.persistence.DAO.abstraction.ITipoActividadDAO;
import inge_soft.gestoriusNuevo.persistence.entity.implementation.Actividad;
import inge_soft.gestoriusNuevo.persistence.entity.implementation.Estado;
import inge_soft.gestoriusNuevo.persistence.entity.implementation.Evento;
import inge_soft.gestoriusNuevo.persistence.entity.implementation.TipoActividad;

/* FALTA TESTEAR */
@Service("actividadService")
public class ActividadService implements IActividadService {

	@Autowired
	@Qualifier("actividadDAO")
	IActividadDAO actividadDAO;
	
	@Autowired
	@Qualifier("eventoDAO")
	IEventoDAO eventoDAO;
	
	@Autowired
	@Qualifier("tipoActividadDAO")
	ITipoActividadDAO tipoActividadDAO;
	
	@Autowired
	@Qualifier("estadoDAO")
	IEstadoDAO estadoDAO;
	
	public List<Actividad> obtenerTodasActividades(Evento evento) throws DataAccessException {
		return actividadDAO.obtenerTodasActividades(evento);
	}

	@Transactional
	public void crearActividad(Evento evento, Actividad actividad) throws DataAccessException {
		actividad.setEstado(estadoDAO.obtenerEstado("Activo"));
		actividadDAO.crearActividad(evento, actividad);
	}

	@Transactional
	public void modificarActividad(Actividad actividad) throws DataAccessException {
		actividad.setEstado(estadoDAO.obtenerEstado(actividad.getEstado().getNombre()));
		actividadDAO.modificarActividad(actividad);
	}
	
	@Transactional
	public void cancelarActividad(Actividad actividad){
		actividad.setEstado(estadoDAO.obtenerEstado("Cancelada"));
		actividadDAO.modificarActividad(actividad);
	}

	public List<TipoActividad> obtenerTodosTiposActividad() throws DataAccessException {
		return tipoActividadDAO.obtenerTodosTiposActividad();
	}

	public List<Estado> obtenerTodosEstados() throws DataAccessException {
		return estadoDAO.obtenerTodosEstados();
	}

	public List<Actividad> obtenerTodasActividades() throws DataAccessException {
		return actividadDAO.obtenerTodasActividades();
	}

	public Actividad obtenerActividad(Long id) {
		return actividadDAO.obtenerPorId(id);
	}

	public TipoActividad obtenerTipoActividad(String nombre) throws DataAccessException {
		return tipoActividadDAO.obtenerTipoActividad(nombre);
	}
	
	@Transactional
	public Evento obtenerEvento(Long idEvento){
		return eventoDAO.obtenerEvento(idEvento);
	}
	
	public Estado obtenerEstado(String nombre) throws DataAccessException {
		return estadoDAO.obtenerEstado(nombre);
	}
	
	
}
